Technical Field
The present disclosure relates to storage systems and, more specifically, to efficient segment cleaning in a storage system.
Background Information
A storage system typically includes one or more storage devices, such as solid state drives (SSDs) embodied as flash storage devices of a storage array, into which information may be entered, and from which the information may be obtained, as desired. The storage system may implement a high-level module, such as a file system, to logically organize the information stored on the storage devices of the array as storage containers, such as files or logical units (LUNs). The storage system cluster may be configured to operate according to a client/server model of information delivery to thereby allow one or more clients (hosts) to access the storage containers, e.g., via an I/O request. Each storage container may be implemented as a set of data structures, such as data blocks that store data for the storage containers and metadata blocks that describe the data of the storage containers. For example, the metadata may describe, e.g., identify, storage locations on the devices for the data.
Some types of SSDs, especially those with NAND flash components, may or may not include an internal controller (i.e., inaccessible to a user of the SSD) that moves valid data from old locations to new locations among those components at the granularity of a page (e.g., 8 Kbytes) and then only to previously-erased pages. Thereafter, the old locations where the pages were stored are freed and available to store additional data (e.g., received via the I/O request). Moving of valid data from old to new locations. i.e., garbage collection, contributes to write amplification in the system. Although needed to provide available locations on the SSDs of the storage array (i.e., storage space) to write the additional data, such garbage collection should be performed so as to maintain smooth latency from a host perspective (i.e., maintain a bounded latency for the I/O request). It is thus desirable to continue servicing data (i.e., processing I/O requests) at the storage system within the bounded latency, while ensuring there is sufficient storage space and bandwidth to garbage collect and write the data to the free locations of the storage array.